package Utils.data;

import org.apache.commons.lang3.ArrayUtils;

import java.io.File;
import java.util.Arrays;

/**
 * 数据处理工具类
 *
 * @author d11yu
 */
public final class DataProcessUtils {
    /**
     * 将字节数组转换为字符串，能自动忽略字节数组中的空元素。
     *
     * @param bs 待处理的字节数组
     * @return 返回字符串
     */
    public static String Bytes2String(byte[] bs) {
        int len = 0;
        for (byte b : bs) {
            if (b != 0) {
                len++;
            }
        }
        return new String(bs, 0, len);
    }

    /**
     * 合并数组
     *
     * @param arrs
     * @param <T>
     * @return
     */
    public static <T> T[] combineArrays(T[]... arrs) {
        T[] res = null;
        for (T[] obj : arrs) {
            res = ArrayUtils.addAll(res, obj);
        }
        return res;
    }

    /**
     * 合并数组
     *
     * @param arr
     * @param objs
     * @param <T>
     * @return
     */
    public static <T> T[] combineArrays(T[] arr, T... objs) {
        return ArrayUtils.addAll(arr, objs);
    }

    /**
     * 合并数组
     *
     * @param obj
     * @param arrs
     * @param <T>
     * @return
     */
    public static <T> T[] combineArrays(T obj, T[]... arrs) {
        T[] res = (T[]) Arrays.asList(obj).toArray();
        for (T[] ele : arrs) {
            res = ArrayUtils.addAll(res, ele);
        }
        return combineArrays(res);
    }

    /**
     * 根据传入值的类型返回相应的class。
     *
     * @param value
     * @return
     */
    public static Class getObjectClass(Object value) {
        if (value instanceof String) {
            return String.class;
        } else if (value instanceof File) {
            return File.class;
        } else if (value instanceof Integer) {
            return Integer.class;
        } else if (value instanceof Float) {
            return Float.class;
        } else if (value instanceof Double) {
            return Double.class;
        } else if (value instanceof Long) {
            return Long.class;
        } else if (value instanceof Boolean) {
            return Boolean.class;
        } else {
            return Object.class;
        }
    }
}
